package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

/**
我们可以基于请求的 Content-Type 识别请求数据类型并利用反射机制
自动提取请求中 QueryString 、 form表单 、 JSON 、 XML 等参数到结构体中
下面的示例代码演示了 .ShouldBind() 强大的功能
它能够基于请求自动提取 JSON 、 form表单 和 QueryString 类型的数据，并把值绑定到指定的结
构体对象。
*/

// Binding from JSON
type Login struct {
	Username string `form:"username" json:"username" binding:"required"`
	Password string `form:"password" json:"password" binding:"required"`
}

func LoginHandler(c *gin.Context) {
	var login Login
	if err := c.ShouldBind(&login); err != nil {
		// 如果数据校验不通过直接返回
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
	}
	c.String(http.StatusOK, fmt.Sprintf("姓名：%s -- 密码：%s", login.Username,
		login.Password))
}

func main() {
	//1.创建路由
	r := gin.Default()
	//绑定理由
	r.POST("/login/", LoginHandler)
	r.Run()
}
